#pragma once

#include <iostream>

namespace MutexLock
{
    class Mutex//互斥锁一般不允许拷贝赋值，因为可能多个线程共用一把锁。
    {
    public:
        Mutex(const Mutex&)=delete;             //将拷贝和赋值禁用
        const Mutex& operator=(const Mutex&)=delete;
        Mutex()//构造
        {
            int n=::pthread_mutex_init(&_lock,nullptr);
            n++;
            n--;//用一下定义的变量，以免编译器报错。
        }
        void Lock()
        {
            int n=::pthread_mutex_lock(&_lock);
            n++;
            n--;
        }
        void UnLock()
        {
            int n=::pthread_mutex_unlock(&_lock);
            n++;
            n--;
        }
        ~Mutex()//析构
        {
            int n=::pthread_mutex_destroy(&_lock);
            n++;
            n--;//用一下定义的变量，以免编译器报错。
        }
    private:
        pthread_mutex_t _lock;
    };

};